﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*
	伪随机数的生成
	1.先包含头文件 <stdlib.h> <time.h>
	2.需要用到三个函数: srand(),rand() 这两个都声明在stdlib.h中
		time(NULL);	这个函数声明在<time.h>中

	具体步骤是:
	1.先利用srand函数来设置随机数生成器,设置随机数种子
		调用方式是:
		void srand(unsigned int seed);
		传入一个无符号整数, 这个整数就是随机数的种子值
		种子值的作用是:
		rand函数会根据种子值,生成一个随机数的序列
		只要种子值不变,这个随机数序列就是永远不变的
		所以它叫伪随机数,因为不是真的随机数
		假如种子值是x
		伪随机数序列是1,2,3,4,5....
		这意味着设置种子值后,第一次调用rand函数,返回值一定是1
		第二次一定是2
		....
		(重点)而且只要重新设置一次种子值, 那么随机数序列就会重置
		根据这个特点, 随机数种子值一般一次程序运行,就只需要设置一次就够了, 没有必要设置多次

	2.然后调用rand()函数, 调用方式如下:
		int rand(void);
		此时返回值就是一个随机数
		返回 ​0​ 与 RAND_MAX 间的随机整数值（包含 0 与 RAND_MAX）。
		RAND_MAX的取值要看平台和编译器实现
		MSVC平台上,取值是32767
		所以生成的随机数的范围是[0, 32767]

	3.种子值应该如何设置呢？
		我们希望每一次程序运行种子值都不同
		这样就能够保证随机数序列在不同程序的运行间是不一样的
		用时间就可以保证
		time(NULL);
		用来获取当前时间的时间戳，它是自格林威治时间1970年1月1日0时0分0秒到现在时间的秒数之差

		注意：
		如果说两次程序的运行间隔小于1s，那么种子值会设置成一样的，导致随机序列相同

	总结步骤：
	1.包含头文件<stdlib.h> <time.h>
	2.利用srand(time(NULL));设置种子值
	3.利用rand来生成随机数
*/

int main(void) {
	//srand(3);	// 设置随机数种子值
	//int ret1 = rand();
	//int ret2 = rand();
	//int ret3 = rand();
	//int ret4 = rand();
	//srand(100);
	//int ret = rand();	//这里又是第一次调用rand 所以和上面第一次调用返回值一样

	// 利用时间戳来作为种子值
	//srand(time(NULL));	// 设置随机数种子值
	//int ret1 = rand();
	//printf("%d", ret1);

	for (int i = 0; i < 1000000; i++){
		srand(time(NULL));
		int ret1 = rand();
		printf("%d", ret1);
	}

	return 0;
}